package validation

import (
	"errors"
	validation "github.com/go-ozzo/ozzo-validation/v3"
	"go_batch_create_orders/admin/model"
	"go_batch_create_orders/utils"
)

type UserValidation struct {
}

func (UserValidation) ValidateUserLogin(login model.UserLogin) (err error) {
	err = utils.ValidateData(&login,
		utils.ValidateFields(&login.Password, utils.Required("密码必填")),
		utils.ValidateFields(&login.UserName, utils.Required("用户名必填")),
	)
	return
}

//数据验证 批量验证的需要对返回的错误进行处理
func (UserValidation) Validate(users model.Users) (err error) {
	err = utils.ValidateData(&users,
		utils.ValidateFields(&users.Id, utils.Min(5, "最小值5"), utils.Required("id 必填"), utils.Max(9, "最大不超过9")),
		utils.ValidateFields(&users.UserName, utils.Length(6, 10, "用户名长度为6到10个字符"), utils.Required("用户名必填")),
		utils.ValidateFields(&users.Sex, utils.In("数字应该在其中一个之中", int8(1), int8(2), int8(3)), utils.Custom(CheckSex(users.Sex))),
	)
	return
}

func CheckSex(value int8) validation.RuleFunc {
	return func(value interface{}) error {
		if value != int8(5) {
			return errors.New("value值应该为5")
		} else {
			return nil
		}
	}
}

//单条验证的数据返回错误不需要处理
func CheckValue() (err error) {
	err = utils.ValidateOneField(10, utils.Min(5, "最小值5"), utils.Required("id 必填"), utils.Max(9, "最大不超过9"))
	return
}
